<?php
/**
 * Class RoleController
 */

namespace app\controllers;

use app\controllers\common\BaseController;

use app\models\Role;
use app\models\Access;
use app\models\RoleAccess;
use app\models\User;
use app\models\UserRole;
use app\service\UrlService;
use yii;
class RoleController extends BaseController
{

	public function actionIndex(){
		$list = Role::find()->orderBy(['id'=>SORT_DESC])->all();

		return $this->render('index',['list'=>$list]);
	}

/*
*   添加或者编辑方法
*   get  展示页面
*  post请求则添加或修改页面
*/
	public function actionSet(){
			
		/* 如果是get请求 */
		if( \Yii::$app->request->isGet ){
			$id = $this->get('id',0);
			$info = [];
			if( $id ){
				$info = Role::find()->where(['id'=>$id])->One();
			}
			return $this->render('set',['info'=>$info]);
		}

		$id = $this->post('id',0);
		$name = $this->post('name','');
		$date_now = date('Y-m-d H:i:s');
		if(!$name){
			// 用户名为空
			return $this->renderJSON([],'请输入合法的用户名',-1);
		}
		/* 查询是否存在角色名相同的记录 */
		$role_info = Role::find()->where(['name'=>$name])->andWhere(['!=','id',$id])->one();
		if( $role_info ){
			// 存在则提示已存在
			return$this->renderJSON([],'角色名已存在',-1);
		}
		$info = Role::find()->where(['id'=>$id])->one();
		/* 查询是否存在数据 */
		if($info){
			/* 存在则编辑 把信息保存到模型中等待修改和提交*/
			$role_model = $info;
		}else{
			/* 不存在则添加操作*/
			$role_model = new Role();
			$role_model->create_time = $date_now;
		}

		/*  最后不管是编辑还是添加，吧传过来的角色名替换了；*/
		$role_model->name = $name;
		$role_model->update_time = $date_now;

		$role_model->save(0);
// 因为是post请求，
		return $this->renderJSON([],'操作成功',200);
	}


	public function actionAccess(){
		if(yii::$app->request->isGet){
			$id  = $this->get('id',0);
			$backurl = UrlService::BuildUrl('role/index');
			$info = Role::find()->where(['id'=>$id])->one();
			if(!$info){/* 如果没有用户信息，返回首页 （说明非法进入）*/
				return $this->render($backurl);
			}
			/* 查询全部权限 */
			$access_list = Access::find()->where(['status'=>1])->all();
			/* 查询角色的权限 */
			$role_access = RoleAccess::find()->where(['rid'=>$id])->all();
			$access_ids = array_column($role_access,'accid');
			return $this->render('access',[
				'access_list'=>$access_list,
				'info'=>$info,
				'access_ids'=>$access_ids,

			]);
		}

		/*  接收post请求的参数*/
		$access_ids = $this->post('access_ids',[]);
		$id = $this->post('id',0);
		if(!$id){
			return $this->renderJSON([],'角色不存在',-1);
		}
		$info = Role::find()->where(['id'=>$id])->one();
		if(!$info){
			return $this->renderJSON([],'角色不存在',-1);	
		}
		/*  角色的所有权限 */
		$access_list = RoleAccess::find()->where(['rid'=>$id])->asArray()->all();
		$r_accc = array_unique(array_column($access_list,'accid'));


		// post 差 mysql  =》  添加
		/* 比较*/
		$del_list = array_diff($r_accc,$access_ids);//删除
		if($del_list){
			RoleAccess::deleteAll([ 'rid' => $id,'accid' => $del_list]);
		}

		$add_list = array_diff($access_ids,$r_accc);
		if($add_list){
			foreach ($add_list as $key => $value) {
				$role_access_module = new RoleAccess();
				$role_access_module->accid = $value;
				$role_access_module->create_time = date('Y-m-d H:i:s');
				$role_access_module->rid = $id;
				$role_access_module->save(0);
			}
		}
		
		return $this->renderJSON([],'操作成功',200);	

		/* 
1 . 接收参数，id accids
2 . 判断 用户是否存在， 获取用户权限列表平，获取用户所属角色的权限
3 . 
		 */

	}





}